import psutil
from datetime import datetime


# 输出表头部分
print("+" + '-' * 40 + "+")
# 表格宽度40个字符、每个汉字占2个字符宽度
print('|' + ' ' * 13 + '计算机信息图卡' + ' ' * 13 + '|')
print("|" + '-' * 40 + "|")

# 切片方式获取字符串中的3个计算机部件名称
cmp_component = "CPU#内存#磁盘"

# [0:3]=CPU，打印不换行
print("| " + cmp_component[0:3] + "：", end=' ')

# %引导符格式化字符串
# 物理和逻辑CPU颗数
print("物理CPU %d 个；逻辑CPU %d 个。     |" %(
        psutil.cpu_count(logical=False), 
        psutil.cpu_count()
    )
)

# CPU占用率
cpu_percent = psutil.cpu_percent(interval=1)

# %引导符格式化数字
print("| 利用率：%05.2f%%" % cpu_percent, end=' ')
print(' ' * 24 + '|')
print("|" + '-' * 40 + "|")

# 内存大小
memo = psutil.virtual_memory()
# 单位为kb，换算成G
memo_total, memo_used, memo_available =  \
    round(memo.total / 1024 / 1024 / 1024), \
    round(memo.used / 1024 / 1024 / 1024, 1), \
    round(memo.available / 1024 / 1024 / 1024, 1)

# f-str格式化
# [-5:-3]=内存
print(f"| {cmp_component[-5:-3]}：{' ' * 32} |")
print(f"| 总计：{memo_total} G；", end=' ')
print(f"已用：{memo_used} G；", end=' ')
print(f"可用：{memo_available} G。|")

# {data:formater}
print(f"| 已使用：{memo_used/memo_total:.1%}" + " " * 26 + "|")

print("|" + '-' * 40 + "|")

# str.format()格式化
# 简化演示，此处只计算主挂载点下的磁盘容量
disk_percent = psutil.disk_usage('/').percent

# cmp_component.split("#")[2]=磁盘
# cmp_component.split("#")=['CPU', '内存', '磁盘']
# a) format()通过位置
print("| {0}：{1} | 占比：{2:2.0f} % |".format(
        cmp_component.split("#")[2], 
        " " * 19, 
        disk_percent
    )
)

# 简单估算容量，不采用1024，而是1000
disk_total = str(round(psutil.disk_usage('/').total / 1e9)) + " G"
disk_used = str(round(psutil.disk_usage('/').used / 1e9)) + " G"
disk_free = str(round(psutil.disk_usage('/').free / 1e9)) + " G"

# b)format()通过命名参数
print("| 总计：{total} | 已用：{used} | 空余：{free} |".format(
        total=disk_total,
        used=disk_used,
        free=disk_free
    )
)
print("+" + '-' * 40 + "+")

# 打印当前系统日期和时间
# 不带时区信息，now()和today()一样
# now = datetime.now()
now = datetime.today()
print("打印时间：" + now.strftime("%H:%M:%S %p %Y-%m-%d(%a)"))
